import appStorage from '@/utils/store/index'

const Storage: any = new appStorage()

class appRouter {
	public config: any;
	constructor (config: any) {
		this.config = config
	}
	/**
	* @description 保留当前页面，跳转到应用内的某个页面，使用uni.navigateBack可以返回到原页面
	*/
	public push (params?: any): void {
		const res: any = this.handleLoginStatus(params)
		if (res) {
			uni.navigateTo(res)
		}
	}
	
	/**
	* @description 关闭当前页面，跳转到应用内的某个页面
	*/
	public replace (params?: any): void {
		const res: any = this.handleLoginStatus(params)
		if (res) {
			uni.redirectTo(res)
		}
	}
	/**
	* @description 关闭所有页面，打开到应用内的某个页面
	*/
	public reLaunch (params?: any): void {
		const res: any = this.handleLoginStatus(params)
		if (res) {
			uni.reLaunch(res)
		}
	}
	/**
	* @description 关闭当前页面，返回上一页面或多级页面
	*/
	public go(delta: any) {
		uni.navigateBack({
			delta
		})
	}
	/**
	* @description 关闭当前页面，返回上一页面或多级页面
	*/
	public back() {
		uni.navigateBack({
			delta: 1
		})
	}
	/**
	* @description 切换tabBarTab
	*/
	public switchTab (params?: any): void {
		const res: any = this.handleLoginStatus(params)
		if (res) {
			uni.switchTab(res)
		}
	}
	
	// 获取登录状态
	public handleLoginStatus (params: any): void {
		// 校验下参数
		let config: any = {}
		if (typeof params === 'string') {
			config.url = params
		} else {
			config = params
		}
		// 是否开发模式
		if (this.config.devFlag) {
			return config
		}
		// 如果不是开发模式的话
		// 校验下是否登录
		if (!uni.getStorageSync('hasLogin')) {
			// 如果是免登录的路由 直接放行
			const findPath = this.config.noLoginPath.find(cell => config.url.indexOf(cell.path) !== -1)
			if (findPath) {
				return config
			} else {
				this.routerPermissions()
			}
		} else {
			return config
		}
		return
	}
	
	
	// 获取登录状态
	public routerPermissions (): void {
		uni.navigateTo({
			url: '/pages/auth/login'
		})
	}
}
export default appRouter